package be.ipl.finito.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.exceptions.BizException;
import be.ipl.finito.usecases.GestionParties;

@SuppressWarnings("serial")
@WebServlet(name= "listerParties.html")
public class ListerParties extends HttpServlet implements Servlet {

	@EJB
	private GestionParties gp;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		HttpSession session = req.getSession();
		List<Partie> parties;
		parties = gp.listerPartiesARejoindre((Joueur) session.getAttribute("joueur"));
		req.setAttribute("parties", parties);
		Map<Partie, Integer> mapParties = new HashMap<Partie, Integer>();
		try {
		for(Partie partie: parties){
		
			int nbJoueur = gp.getNbJoueurs(partie);
			
			mapParties.put(partie, nbJoueur);
		}
		} catch (BizException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		req.setAttribute("mapParties", mapParties);
		req.setAttribute("url", getServletName());
		RequestDispatcher rd = getServletContext().getNamedDispatcher(
				"ListerParties");
		rd.forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//TODO faire le traitement pour rejoindre la partie et passer dans Attente
		int id_partie = Integer.parseInt(req.getParameter("partie"));
		HttpSession session = req.getSession();
		
		Joueur joueur = (Joueur) session.getAttribute("joueur");

		try {
			Partie partie = gp.rejoindreUnePartie(gp.getPartieById(id_partie), joueur);
			@SuppressWarnings("unchecked")
			List<Partie> parties = (List<Partie>) session.getAttribute("parties");
			if (parties == null)
				parties = new ArrayList<Partie>();
			parties.add(partie);
			synchronized(session) {
				session.setAttribute("parties", parties);
			}
			resp.sendRedirect("attente.html?id=" + partie.getId());
			return;
		} catch (BizException e) {
			req.setAttribute("messageErreur", e.getMessage());
		}
		doGet(req, resp);
	}
}